package com.example.infrastructure.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Idempotent {
    
    /**
     * 幂等键前缀
     */
    String prefix() default "idempotent";
    
    /**
     * 过期时间
     */
    long expireTime() default 10;
    
    /**
     * 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;
    
    /**
     * 提示信息
     */
    String message() default "操作太频繁，请稍后再试";
    
    /**
     * 幂等键生成策略：USER_ID, IP, CUSTOM
     */
    IdempotentType type() default IdempotentType.USER_ID;
    
    /**
     * 自定义键表达式(SpEL)
     */
    String key() default "";
    
    enum IdempotentType {
        USER_ID, IP, CUSTOM
    }
}